package com.linkgie.galaxyframework.templating.model.java;

public class JavaPackage {

	public static final String SEPERATOR = ".";

	/**
	 * 包名；
	 */
	private String name = "";
	
	/**
	 * 上级包；
	 * <p>
	 * 注：出于简化起见，采用比较松散的树状结构，不维护子节点关系，也不维护同名子节点（包）实例的唯一性，因为同名的包并不影响最终逻辑的正确性；
	 */
	private JavaPackage parent;

	public JavaPackage() {
	}

	public JavaPackage(String name) {
		this.name = name;
	}
	
	private JavaPackage(String name, JavaPackage parent) {
		this.name = name;
		this.parent = parent;
	}

	public String getName() {
		return parent == null ? name : parent.getName() + SEPERATOR + name;
	}

	/**
	 * 获取当前包名下的子包；
	 * 
	 * @param name 子包的名称；也可以是由分隔符 {@link #SEPERATOR} 分隔的包路径；
	 * @return
	 */
	public JavaPackage getPackage(String name) {
		return new JavaPackage(name, parent);
	}

	@Override
	public String toString() {
		return getName();
	}

	/**
	 * 包的源码路径；
	 * 
	 * @return
	 */
	public String getPath() {
		return getName().replace(SEPERATOR, "/");
	}
}
